2017-03-20 7 views
1

タブで区切られた3列のクリック詳細ファイル(clickInfo.txt)に以下のデータがあります。 第1列はcountとproductIdをスペースで区切って表します。分割タブ区切りの空白付き列

101 111 productXyz  keyword1 
57 111 productXyz  keyword2 
12 222 product ABC12  keyword3 

私は2番目と3番目の列の列は、私が唯一、以下のような製品IDをカウントしていないしたい最初の列から

awk -F'\t' '{print $1 $2 $3 }' clicksInfo.txt 

、第一を抽出するために、次のawkコマンドを使用しています

101  productXyz  keyword1 
57  productXyz  keyword2 
12  product ABC12  keyword3 

したがって、区切り記号としてスペースを使って列(タブ区切り)を分割する方法はありますか?

答えて

3

あなたはsplitspaceで再び列1およびそれの最初の部分を印刷するには、試すことができます:

awk -F'\t' '{split($1, c, " "); print c[1] "\t" $2 "\t" $3}' clicksInfo.txt 
0

@Gunjan:@try:最初の列だけを取得する必要があると考えると、あなたの質問は明らかではありませんが、なぜ$ 1しか印刷しないのですか?また、スペースのデフォルトのデリミタそのものを使って、タブを区切り文字として使用する必要がある理由がわからない場合は、

awk '{print $1}' Input_file 
+0

タブ区切り文字を使用した後の第1列には「count productId」と表示されます。ここでcountとproductIdはスペースで区切られているので、最初に\ tで最初に列をclicksInfo.txtファイルから区切り、最初の列をスペース区切り文字で分割して "count"だけを抽出する必要があります。 –

+0

あなたの要件の詳細をすべてあなたの期待される出力を投稿してください、私はそれを得なかった申し訳ありません。 – RavinderSingh13

1

が直後スペース、すべてを置き換えること-もしあれば-の最初のフィールド($1""で):

$ awk 'BEGIN{FS=OFS="\t"}{sub(/ .*/,"",$1)}1' foo 
101  productXyz  keyword1 
57  productXyz  keyword2 
12  product ABC12 keyword3 
1

sedでは、最初の列は常に想定している桁の2つの列があり

$ sed -E 's/ *[0-9]+[ \t]*/\t/2' clicksInfo.txt 
101  productXyz  keyword1 
57  productXyz  keyword2 
12  product ABC12  keyword3 
  • -E使用EREを、いくつかのsedバージョンは
  • /\t/2のみを交換する、オプションの空白/タブが続く代わりに
  • *オプションのスペース
  • [0-9]+[ \t]* 1桁以上-rオプションを必要とするスペースで区切っsのタブでのそのような第2の発生