【发布时间】:2019-08-04 13:11:58
【问题描述】:
我使用split 拆分了一个+6m 行的csv 文件,并使用sed 将其转换为tsv。一切都非常好,我只需要删除最后一个文件的最后一行(由于split,文件具有按字母顺序降序的扩展名)。
这是我的文件结构。
├── persons-with-significant-control-snapshot-2019-03-13.txt
├── psc_aa
├── psc_aa.csv
├── psc_aa.csv.tsv
├── psc_ab
├── psc_ab.csv
├── psc_ab.csv.tsv
├── psc_ac
├── psc_ac.csv
├── psc_ac.csv.tsv
├── psc_ad
├── psc_ad.csv
├── psc_ad.csv.tsv
├── psc_ae
├── psc_ae.csv
├── psc_ae.csv.tsv
├── psc_af
├── psc_af.csv
├── psc_af.csv.tsv
├── psc_ag
├── psc_ag.csv
└── psc_ag.csv.tsv
我知道最后一个文件的最后一行在转换为 tsv 后系统性地被破坏了 - 现在问题出在:我知道如何删除最后一行 当我知道文件名时,但当我不知道时' t?:
sed -i '$d' psc_ag.csv.tsv
但理想情况下,这个迷你管道会自动运行,所以根据split 程序的名称,这个 sed 可能会改变。
在伪代码中我需要这样的东西:
for file in psc_*.csv.tsv
if iterating on last_file
do sed -i '$d' last_file
【问题讨论】:
-
for file in psc_*.csv.tsv; do : do something here; done; sed -i '$d' "$file"?
标签: linux bash file for-loop sed