2016-03-19 13 views
0

ないときに、私は次の形式でタブ区切りのファイル持って改行文字を作成します。私は何をしたいのはどこのライン間のスペース、または新しい行を作成しているファイル内の3番目の列がユニーク

January Jay RESERVED 4 
February Jay RESERVED 5 
March Jay SUBMITTED 6 
December Jay USED 7 

を3番目の列は一意です。この例では

、私はこの出力をしたいと思います:

January Jay RESERVED 4 
February Jay RESERVED 5 

March Jay SUBMITTED 6 

December Jay USED 7 
+0

Awkは、タブで区切られた表を読み込み、コンマで区切って出力できます。 –

+0

タブを切り取り、SOに貼り付けることができます。それはブラウザのことです。 – LinuxDisciple

+0

ユニークな値を探しているのですか?これらはすべてグループ化されていますが、新しいセクションの前に空白行が必要ですか? – miken32

答えて

1

あなたのデータは、原料と呼ばれるファイルにされている場合:

lastVal="";cat stuff |while read i ; do thisVal=$(echo "$i" |cut -d$'\t' -f'3'); if [ "$lastVal" != "$thisVal" ]; then echo "" ;lastVal=$thisVal; fi ;echo "$i" ;done 

ここにあなたが使用することができ、同じコマンドのバージョンがありますスクリプトとして。以下の使用方法を参照してください。

#!/bin/bash 
lastVal=""; 
while read i ; do 
    thisVal=$(echo "$i" |cut -d$'\t' -f'3') 
    if [ "$lastVal" != "$thisVal" ]; then 
     echo "" 
     lastVal=$thisVal 
    fi 
    echo "$i" 
done 


スクリプトmyScript.bashに名前を付ける場合は、あなたがそれをこれらの2つの方法のいずれかを使用できます。

cat yourfile | /path/to/myScript.bash 

または

/path/to/MyScript.bash < yourfile 

注もしあなたのことBashプロンプトにリテラルタブを挿入したい場合は、ctrl + vを入力してからタブを押すことができます。 Ctrl + vを押すと他の特殊文字も挿入できます。 Ctrl + vを押すとタブのような特殊文字を入力できるようになりますので、カット-d '部分の区切り文字としてTABを追加するにはCtrl + Vを押してからタブを押します(これはLinuxではありません)。

+0

これはすべての行の間にスペースを入れます – user3299633

+0

コードを正しくフォーマットしてください! – miken32

+0

気にしないで、正しく動作しました。 – user3299633

0

Awkのは非常に手際よくこれを行うことができます:

awk -F $'\t' '{print (v==$3 ? $0 : "\n"$0); v=$3}' foo.txt 

awkは、データの空白で区切られたカラムで動作するように設計されているので、第3列は、$3で表されます。値が変更されたかどうかを確認するだけで、余分な行がprintになります。

これは「一意の」値ではなく、前の行からの値の変更のみをチェックします。私が言うことから、それはあなたが受け入れた答えと同じことです。

+0

-F $ '\ t'を追加した場合、まったく同じ動作をするでしょう。それがなければ、awkの答えは「Jay」の予約ではうまく動作しますが、「Mary Kate」ではそうではありません。スペースを含む$ IFSを使用しているからです。 – LinuxDisciple

+0

良い点は、タブで区切った値を明示的にFSに記述しても問題ありません。 – miken32

関連する問題