我发现很难调试我的shell脚本。我有以下文件test.csv

The Gardens,Gard (AUS),AEST,NSW,,Sandown Park,SPrk (AUS),AEST,VIC,,Grade 5,GR5,
Wentworth Park,WPrk (AUS) ,AEST,NSW,,The Meadows,Mead (AUS),AEST,VIC,,Juvenille,JUV,
Angle Park,AnPk (AUS),ACST,SA,,Warragul,Wgul (AUS),AEST,VIC,,,,

WPrk(AUS)有一个额外的尾随空白,我希望对其进行裁剪然后再打印。运行
awk -F\, 'gsub(/[ \t]+$/, "", $2); {print $2 ":"}' test.csv

产生
Gard (AUS):
Wentworth Park WPrk (AUS) AEST NSW  The Meadows Mead (AUS) AEST VIC  Juvenille JUV
WPrk (AUS):
AnPk (AUS):

除了第二行我不知道为什么会出现

最佳答案

awk -F\, 'gsub(/[ \t]+$/, "", $2); {print $2 ":"}' test.csv

由于您在任何操作块(gsub)之外都有{...},因此将每行作为条件进行评估。它返回它进行的替换的数量,因此它将在大多数输入上返回0,但在要更改的行上返回1。由于没有伴随的 Action ,因此将执行默认 Action ,打印该行;这就是为什么要打印整行的原因。

就像其他人所说的那样,解决方法是将gsub调用放入操作块中。

(此外,为什么\,?逗号在shell中不是特殊字符。)

10-06 07:12