csv 如果行中最后一个字符与bash/awk匹配,则将其删除

vyswwuz2  于 2023-09-27  发布在  其他
关注(0)|答案(4)|浏览(79)

我有一个CSV文件的负载,但他们不干净。
他们用“|”作为一个分离器。某些文件的尾部有“|”,这意味着在第1行中有N列,并且在第2+行中有N+1。
我想循环遍历这些文件,并删除包含尾随分隔符的行。
使用shell和awk或类似工具对单个文件执行此操作的最佳方法是什么?
输入csv:

|some|data|here
|some|more|data|
|even|more|data|

输出量:

|some|data|here
|some|more|data
|even|more|data
qyyhg6bp

qyyhg6bp1#

使用sed就地更换:

sed -i 's/|$//' test.txt
  • |$-匹配$行末尾的|
jtjikinw

jtjikinw2#

使用您显示的示例,请尝试以下awk代码。

awk '/\|$/{
  $0=substr($0,1,length($0)-1)
}
1
' Input_file
yduiuuwa

yduiuuwa3#

看看这个:

perl -pe 's/\|$//' test.txt

输出

|some|data|here
|some|more|data
|even|more|data
2exbekwf

2exbekwf4#

echo '
 |some|data|here
 |some|more|data|
 |even|more|data|' |
gawk \/\/ RS='[|]?\r?\n' # precisely trim off 1 trailing pipe
mawk  $$  RS='[\r|]*\n'  # trim off any amount of it
nawk NF=1 FS='[|]$'      # via column splitter FS instead of row-splitter RS
|some|data|here
|some|more|data
|even|more|data

相关问题