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)。必要のないファイル全体をメモリに保持します。また、列の空白では機能しません。

行ごとに解析し、シェル ツールを使用して列を分割します (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 に答える