0

次の形式の内容を含む入力ファイルがあります。

ABCD     XYZAB   1234
PQRSTUV  STU     SKIP
LMN      OPRQM   8966
RSTUV    OPM     SKIP
TUV      ZXU     SKIP

以下のように、このファイルを解析して、最後の列が「SKIP」の行が最終出力ファイルに表示されないように、新しいファイルに出力したいと考えています。

ABCD     XYZAB   1234
LMN      OPRQM   8966

上記を処理するために、次のシェルスクリプトを作成しました。

while read -r col1 col2 col3
do
    if [ "$col3" != "SKIP" ]
    then
    printf "%s %s %s\n" "$col1" "$col2" "$col3";
    fi
done <input.txt > output.txt

しかし、上記のスクリプトは機能していないようです。私の出力ファイルにはまだすべての行があり、最後の列に「SKIP」があります。「条件付き」が失敗する理由がわかりません。

ありがとう、vj

4

2 に答える 2

1

スクリプトは正しいのですが、編集中の入力ファイルは Windows 環境にあったようです。その結果、行末は「\n」ではなく「\r」になりました。だから、そこにミスマッチがありました。そのため、条件チェックも失敗しました。行末を UNIX 形式に変換すると、必要な出力が得られました。みんなの助けに感謝します。

Vj

于 2013-03-30T02:53:19.940 に答える
0

VJ - あなたのスクリプトに問題はありません。あなたのコードと入力を貼り付けたところ、結果はまさにあなたが望んでいたものでした. 私のラップトップ「ttt」からの以下の証拠を参照してください。

[ttt:/m/temp/stack] 猫 vjvj

    読み取り中 -r col1 col2 col3
    行う
        if [ "$col3" != "SKIP" ]
        それから
        printf "%s %s %s\n" "$col1" "$col2" "$col3";
        フィ
    完了 output.txt

[ttt:/m/temp/stack] 猫の入力.txt
ABCD ザイザブ 1234
PQRSTUV STU SKIP
LMN OPRQM 8966
RSTUV OPM スキップ
TUV ZXU SKIP
[ttt:/m/temp/stack] cat output.txt
ABCD ザイザブ 1234
LMN OPRQM 8966
[ttt:/m/temp/stack] 猫 /etc/lsb-release

    DISTRIB_ID=リナックスミント
    DISTRIB_RELEASE=13
    DISTRIB_CODENAME=マヤ
    DISTRIB_DESCRIPTION="Linux Mint 13 Maya"

[ttt:/m/temp/スタック]

于 2013-03-30T01:25:01.977 に答える