Shell-Script
向文件中添加行以使它們的長度相等
我有一堆具有 N 列和不同行數(行)的 .csv 文件。我想添加盡可能多的空行
;...;
(N 個分號)以使它們的長度相同。我可以手動獲取最長文件的長度,但自動完成也很好。例如:
我有,
file1.csv
128; pep; 93; 22:22:10; 3; 11 127; qep; 93; 12:52:10; 3; 15 171; pep; 73; 22:26:10; 3; 72
file2.csv
128; pep; 93; 22:22:10; 3; 11 127; qep; 93; 12:52:10; 3; 15 121; fng; 96; 09:42:10; 3; 52 141; gep; 53; 21:22:10; 3; 62 171; pep; 73; 22:26:10; 3; 72 221; ahp; 93; 23:52:10; 3; 892
file3.csv
121; fng; 96; 09:42:10; 3; 52 171; pep; 73; 22:26:10; 3; 72 221; ahp; 93; 23:52:10; 3; 892 141; gep; 53; 21:22:10; 3; 62
我需要,
file1.csv
128; pep; 93; 22:22:10; 3; 11 127; qep; 93; 12:52:10; 3; 15 171; pep; 73; 22:26:10; 3; 72 ;;;;; ;;;;; ;;;;;
file2.csv
128; pep; 93; 22:22:10; 3; 11 127; qep; 93; 12:52:10; 3; 15 121; fng; 96; 09:42:10; 3; 52 141; gep; 53; 21:22:10; 3; 62 171; pep; 73; 22:26:10; 3; 72 221; ahp; 93; 23:52:10; 3; 892
file3.csv
121; fng; 96; 09:42:10; 3; 52 171; pep; 73; 22:26:10; 3; 72 221; ahp; 93; 23:52:10; 3; 892 141; gep; 53; 21:22:10; 3; 62 ;;;;; ;;;;;
感謝@Sparhawk 在評論中的建議,我根據這些更新,
#!/bin/bash emptyLine=;;;;;;; rr=($(wc -l files*pattern.txt | awk '{print $1}' | sed '$ d')) max=$(echo "${rr[*]}" | sort -nr | head -n1) for name in files*pattern.txt;do lineNumber=$(wc -l < $name) let missing=max-lineNumber for((i=0;i<$missing;i++));do echo $emptyLine >> $name done done
好吧,既不優雅也不高效。實際上,考慮到數據量很小,這需要幾秒鐘的時間,這聽起來很漫長。儘管如此,它仍然有效,
#!/bin/bash emptyLine=;;;;;;; rr=($(wc -l files*pattern.txt | awk '{print $1}' | sed '$ d')) max=$(echo "${rr[*]}" | sort -nr | head -n1) for name in $(ls files*pattern.txt);do lineNumber=$(cat $name | wc -l ) let missing=max-lineNumber for((i=0;i<$missing;i++));do echo $emptyLine >> $name done done
我只是把這個文件放在我有文件的目錄中,前提是有一個模式可以用來列出它們
files*pattern.txt