我发现很难调试我的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中不是特殊字符。)