如何根据shell脚本中的行创建CSV文件?

时间:2017-01-09 14:04:15

标签: linux bash shell

我有一个文本文件ffmpeg -i video_withoutaudio.mp4 -i audio.mp4 -c:v copy -c:a aac -strict -2 video_withaudio.mp4,其值低于

/tmp/some.txt

我想用以下格式创建一个csv文件(即基于行。不基于列。)

JOHN              YES     6          6            2345762
 SHAUN             NO     6          6            2345748

我试过下面的代码

JOHN,YES,6,6,2345762
SHAUN,NO,6,6,2345748

此处for i in `wc -l /tmp/some.txt | awk '{print $1}'` do awk 'NR==$i' /tmp/some.txt | awk '{print $1","$2","$3","$4","$5}' >> /tmp/some.csv done 将获得值2(即文本文件中的2行)。 对于每一行wc -l /tmp/some.txt | awk '{print $1}',将5个字段打印到awk 'NR==$i' /tmp/some.txt | awk '{print $1","$2","$3","$4","$5}'文件中,该文件以逗号分隔。

当我单独执行每个命令时,它将起作用。但是当我把它作为一个shell脚本时,我得到了空的some.csv文件。

4 个答案:

答案 0 :(得分:1)

我建议:

sed 's/[[:space:]]\+/,/g' /tmp/some.txt

答案 1 :(得分:1)

@Kart:请你试试。

paint

我希望这会对你有所帮助。

答案 2 :(得分:1)

你几乎得到了它。 awk已经逐行处理了该文件,因此您不需要使用for循环进行迭代。

所以你只需要运行:

awk '{print $1","$2","$3","$4","$5}' /tmp/some.txt >> /tmp/some.csv

答案 3 :(得分:1)

使用tr,压缩(-s),然后音译空格/制表符([:blank:]):

tr -s '[:blank:]' ',' <file.txt

使用sed,用,替换一个或多个空格/标签:

sed 's/[[:blank:]]\+/,/g' file.txt

使用awk,使用,函数将gsub()替换为一个或多个空格/制表位:

awk 'gsub("[[:blank:]]+", ",", $0)' file.txt

示例

% cat foo.txt
JOHN              YES     6          6            2345762
SHAUN             NO     6          6            2345748


% tr -s '[:blank:]' ',' <foo.txt                     
JOHN,YES,6,6,2345762
SHAUN,NO,6,6,2345748

% sed 's/[[:blank:]]\+/,/g' foo.txt                   
JOHN,YES,6,6,2345762
SHAUN,NO,6,6,2345748

% awk 'gsub("[[:blank:]]+", ",", $0)' foo.txt
JOHN,YES,6,6,2345762
SHAUN,NO,6,6,2345748