我正在学习bash脚本,我写了这个简单的脚本:
#!/bin/bash
for f in $(cat test.csv | cut -d';' -f 4)
do
EXT=".pdf"
echo "$f$EXT"
done
文件test.csv是:
col1;col2;col3;test1
col1;col2;col3;test2
col1;col2;col3;test3
...
此脚本的输出是:
.pdf
.pdf
.pdf
...
预期的输出是:
test1.pdf
test2.pdf
test3.pdf
...
对不起愚蠢的问题但我坚持这个,我想,这个问题很少。
此脚本的输出相同:
#!/bin/bash
while IFS=\; read col1 col2 col3 col4
do
echo "$col4".pdf
done < test.csv
答案 0 :(得分:1)
不要for i in $(cat something)
。它会将整个文件保存在不需要的内存中。它也不适用于列中的空格。
更好地逐行解析,并使用shell工具拆分列(read
内置)。
的内容
while IFS=\; read col1 col2 col3 col4
do
echo "$col4".pdf
done < test.csv
应该这样做。
如果您的列以空格分隔,则可以删除IFS=\;
部分。
答案 1 :(得分:0)
试试这个:
#!/bin/bash
while read line
do
LINE=`echo "$line" | awk -F';' '{print $4}'`
echo "${LINE}.pdf"
done < test.csv