0

我正在学习 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
4

3 回答 3

1

或使用 sed:

sed  's/.*;\(.*\)/\1.pdf/' file
于 2013-01-07T08:43:20.690 回答
1

不要这样做for i in $(cat something)。它会将整个文件保存在不需要的内存中。它也不适用于列中的空格。

更好地逐行解析,并使用 shell 工具来拆分列(read内置)。

类似的东西

while IFS=\; read col1 col2 col3 col4
do
    echo "$col4".pdf
done < test.csv

应该做。

IFS=\;如果您的列由空格分隔,则可以删除该部分。

于 2013-01-05T19:26:31.577 回答
0

尝试这个:

#!/bin/bash
while read line
do
        LINE=`echo "$line" | awk -F';' '{print $4}'`
        echo "${LINE}.pdf"
done < test.csv
于 2013-01-05T21:51:21.157 回答