我的输出有很多行。输出的行数为不一致的。有没有办法可以选择最后一行以便找到并替换字符?如果不使用awk
或sed
,任何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