【发布时间】:2021-06-04 20:35:24
【问题描述】:
我想在给定条件的情况下使用 bash 脚本将一列附加到 csv 文件。条件是 file1.csv 中的列必须有多个唯一值才能添加到 newfile.csv。这些不是真正的文件。原始文件有更多的列/行。
类似这样的:
file1.csv
1, ah, th, ab, a
2, ah, jk, ab, b
3, ah, lk, ab, c
4, ah, hh, ab, d
newfile.csv 应该是:
1, th, a
2, jk, b
3, lk, c
4, hh, d
这是我尝试过的脚本。但是,它不会追加新列。输出只是一个 csv,其中 file1.csv 的最后一列具有多个唯一值。
#!/bin/bash
cut -d, -f1 file1.csv > newfile.csv
limit=1
for i in $(seq 2 5); do
value=$(cat file1.csv | cut -d, -f$i | uniq -u | wc -l)
if [ $value -gt $limit ]; then
paste -d, newfile.csv <(cut -d, -f$i file1.csv) > newfile.csv
else echo "Column $i not appended."
fi
done
我怀疑这可能与我在一行中有两次 newfile.csv 的事实有关。我尝试为每次交互创建一个新文件 newfile2.csv,但这不起作用。我是 Bash 新手。
【问题讨论】:
-
每一行的列数是否相同?
-
文件有多大,它们可以放入内存吗?
标签: bash csv for-loop awk append