myr*_*dio 5 awk shell-script text-processing csv files
我有一堆 .csv 文件,其中包含 N 列和不同数量的行(行)。我想添加尽可能多的空行;...;(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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
我需要,
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
;;;;;
;;;;;
;;;;;
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
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
;;;;;
;;;;;
Run Code Online (Sandbox Code Playgroud)
感谢@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
Run Code Online (Sandbox Code Playgroud)
嗯,既不优雅也不高效。实际上,考虑到数据量很小,这需要几秒钟的时间,这听起来像是永恒的时间。尽管如此它还是有效的,
#!/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
Run Code Online (Sandbox Code Playgroud)
我只是把这个文件放在我有文件的目录中,前提是有一个我可以用来列出它们的模式files*pattern.txt