我有一个文本文件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
文件。
答案 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