2010-11-27 3 views
3

ラインxとyの間のn番目のタブ区切り値を取得します実際には、各行からの8番目のタブ区切り値を取得し、カンマで区切ってファイルに書き込もうとしましたが、数十のオンライン記事を読んでいるにもかかわらず、パターンマッチングに使用する正しい構文を見つけることができません。私は基本的に運で/([^\t]*\t){7}([0-9]*).*/SEDコマンドは、私は大規模なタブ区切りのテキストファイルから特定の行を抽出し、別のファイルに書き込むことができました

$2に一致するようにしようとしているたびに

。テキストファイルfile.tsv内

行が似ている:

01 name1 title1 summary1 desc1 image1 url1 120019 time1 
02 name2 title2 summary2 desc2 image2 url2 576689 time2 

誰もがこのクエリで私を助けることができるしてください?

$ awk '{ print col 8 : $8 }' file 

前方の仕事は、私は推測しやすくなります。

+0

サンプルラインを提供できますか? –

+0

上記の形式を追加しましたが、次のようなコマンドではあまりうまくいきませんでした。 'sed -e '100、/ start/s/[^ \ t] \ t [^ \ t] \ t [ \ t [\ t] \ t [\ t] \ t [^ \ t] \ t // '-e'/stop /、200 s/\ t。* // 'file.tsv' – Donna

答えて

1

はsedの拡張表現:ここ

sed -nre '100,200{s/^(\S+\s+){7}(\S+).*$/\2/;p}' file.tsv 

は、唯一のPOSIXを使用している:

sed -n '100,200{s/^\([^[:space:]]\+[[:space:]]\+\)\{7\}\([^[:space:]]\+\).*$/\2/;p}' file.tsv 

私はAlfに同意するとawkがこれに適しています。空のフィールドがある場合

awk 'NR==100,NR==200{print $8}' file.tsv 
+0

タブ以外の空白を残す必要がある場合は、POSIX版の '[:space:]'を '\ t'に置き換えてください。 –

+0

これは理想的です。その解決に感謝します。あなたは私の問題を完全に解決しました。私はそれをどのように修正するかという形を見ることができます。あなたの助けが大変ありがとうございます。 – Donna

+0

ようこそ。 –

1

私は、私はむしろそのようにawkを使うと思います。

+0

あなたの返事をありがとう、残念ながら私はタブ付きファイルでその構文を使用する方法に慣れていません。 – Donna

2

A Perlのワンライナー:それはGNUを使用している。ここ

perl -F'\t' -ane 'push @csv, $F[7] if $. > 100 && $. < 200; END { print join ",", @csv if @csv }' /path/to/input/file > /path/to/output/file 
+0

こんにちは、お返事ありがとうございます!それは理想的ですね。唯一の問題はデータがカンマ区切りではなく区切られているため、右列と一致しないことです。どうすれば変更できますか? – Donna

+0

ドン:こんにちは。どういたしまして。フィールドセパレータとして明示的に '\ t 'を追加する答えを編集しました。今はうまくいくはずです。 –

+0

ありがとうございました。私は今それを行こうと思います。 – Donna

0

これは動作します:ここで

ラインの制限付きawkソリューションです。

sed -nre '100,200{s/^(([^\t]*)\t){7}([^\t]*)(\t.*|$)/\3/;p}' file.tsv 
関連する問題