使用 awk 或 sed 对最后一行文本执行文本格式搜索

使用 awk 或 sed 对最后一行文本执行文本格式搜索

我的输出有很多行。输出的行数为不一致的。有没有办法可以选择最后一行以便找到并替换字符?如果不使用awksed,任何Unix* 工具。

这是我需要修改的输入的简化示例。通常,其长度为一到两百行,并且各不相同。我想找到最后一个逗号并将其删除。

输入示例

202", # 1233eda 
049", # 1022ats 
194", # 109nunnz 
180", # 0010204NE 
113", # 10195y.it 
489", # 1-420 
345", # 192EelL 
209", # 18tWa 
145", # 18tr 
137", # 1165y_SVM 
561", # 1odeN 
737", # 1hoer_co 
816", # 10138wDUSW 
954", # 1013saLN349ND 
969", # 112t-2_420 
114", # 1012i.fm 
650", # 10zy.i 
860", # 1119b.co 
177", # 1.0109tz

所需输出

202", # 1233eda 
049", # 1022ats 
194", # 109nunnz 
180", # 0010204NE 
113", # 10195y.it 
489", # 1-420 
345", # 192EelL 
209", # 18tWa 
145", # 18tr 
137", # 1165y_SVM 
561", # 1odeN 
737", # 1hoer_co 
816", # 10138wDUSW 
954", # 1013saLN349ND 
969", # 112t-2_420 
114", # 1012i.fm 
650", # 10zy.i 
860", # 1119b.co 
177"  # 1.0109tz

答案1

sed

$ sed '$s/,//' file
操作员 意义
$ 文件的最后一行
s/TO_REPLACE/REMPLACEMENT/ 替代骨架
, 字面意思 ','

使用 aPerl的一行:

$ perl -F, -ne 'if (eof()) {print join " ", @F} else {print}' file 

输出

202", # 1233eda 
049", # 1022ats 
194", # 109nunnz 
180", # 0010204NE 
113", # 10195y.it 
489", # 1-420 
345", # 192EelL 
209", # 18tWa 
145", # 18tr 
137", # 1165y_SVM 
561", # 1odeN 
737", # 1hoer_co 
816", # 10138wDUSW 
954", # 1013saLN349ND 
969", # 112t-2_420 
114", # 1012i.fm 
650", # 10zy.i 
860", # 1119b.co 
177"  # 1.0109tz

答案2

如果这就是您对该输入所做的全部事情,那么我会使用 sed 解决方案@Gilles 发布但由于您已经有了sed脚本,perl并且如果您实际上需要做更多的事情,那么这是一种方法,awk只需缓冲 1 行即可:

$ awk 'NR>1{print p} {p=$0} END{sub(/,/," ",p); print p}' file
202", # 1233eda
049", # 1022ats
194", # 109nunnz
180", # 0010204NE
113", # 10195y.it
489", # 1-420
345", # 192EelL
209", # 18tWa
145", # 18tr
137", # 1165y_SVM
561", # 1odeN
737", # 1hoer_co
816", # 10138wDUSW
954", # 1013saLN349ND
969", # 112t-2_420
114", # 1012i.fm
650", # 10zy.i
860", # 1119b.co
177"  # 1.0109tz

相关内容