2016-03-18 6 views
0

私はシェルスクリプトの初心者で、ファイルから最初の列を取得するコマンドを実行する必要があります(〜に基づいて)。そのコマンドの出力には、新しい行のすべての名前がリストされています。次に、カンマ区切りのリストに変換する必要があります。以下のコマンドである:これは新しい行にファイルの内容を出力し実行awkの出力でコマンドを呼び出す

FILES=`cat 'testfile.txt' | grep 'teststring' | 
     awk -F~ '{print $1}'| sed 's/\n/\,/g' | awk '{print;}'` 

が、私は、カンマが最終的なO/Pを分離得ることはありません。誰か助けてくれますか?

+1

'cat'ファイルを' grep'にする必要はありません。 'grep"パターン "file '。 'awk'の前に' grep'は必要ありません。awkは 'awk '/ pattern/{code}' file'を実行するだけで' grep'だけでなくパターンをも検索できます。 –

+0

あなたはコマンドが何になるのか投稿していただけますか? – user1318369

+0

質問を編集して、簡潔でテスト可能なサンプル入力と予想される出力を表示します。 –

答えて

1

あなたは私たちが/teststring/ grepの代わりに使用して、我々は異なるライン

  • ~で入力を分割レコードセパレータとして~を使用

    FILES=`awk -v RS='~' -v ORS=, '/teststring/' 'testfile.txt' ` 
    
    • 使用することができます
    • {print $0}省略することができます($0ですが、0から分割されます)それは,ORS(出力レコードセパレータ)を設定することにより、デフォルトのアクション
    • あるとして、我々はカンマ区切り出力
  • +0

    上記のコンマ区切りリストはどのようにして取得できますか? – user1318369

    +0

    @ user1318369 ORSを設定します。私は私の答えを変えた。 –

    +0

    txtファイルには4つの列があり、最初の列のみが必要です。これを実行すると、すべての列がコンマで区切られたリストになります。最初の列を取得するにはどうすればよいですか? – user1318369

    0

    pasteを取得するには、カンマに改行を変換するための優れたツールです:

    files=$(awk -F~ '/teststring/ {print $1}' testfile.txt | paste -s -d,) 
    

    ALLCAPSVARNAMESを使用しないでください。シェル変数を踏みにじられてスクリプトを壊すのは簡単です

    関連する問題