2行目から始めて3行ごとにグループ化し、結合された2行目と3行目から最初の列を削除します。

2行目から始めて3行ごとにグループ化し、結合された2行目と3行目から最初の列を削除します。

私はUNIXとコーディング全体に初めて触れ、長い間この問題を解決しようとしましたが、成功しませんでした。私はこれが非常に簡単な解決策であると確信していますが、誰かが私を正しい方向に導くことができれば役に立ちます。

次の形式のデータを含むSummary.txtファイルがあります。

Name criteria1 2 3 4 5 6 7 8 9 10
Sample12345 w x y z
Sample12345.avg l m n
Sample12345.stdn o p q
Sample98765 w2 x2 y2 z2
Sample98765.avg l2 m2 n2
Sample98765.stdn o2 p2 q2

その他など

同じサンプル番号を持つ3行を組み合わせて名前だけを保持したいと思います。

Name criteria1 2 3 4 5 6 7 8 9 10
Sample12345 w x y z l m n o p q
Sample98765 w2 x2 y2 z2 l2 m2 n2 o2 p2 q2

その他など

たとえば、sedを使用してみました(最初にSample12345.avg Sample12345.stdnなどを含むSummary_temp.txtを作成した後)。

for i in `cat Summary_temp.txt`; do sed 's/\n$i//g' Summary.txt; done "-bash:予期しないトークン 'sed'の近くに構文エラーが発生しました。"

私もこの道に行こうとしました。

paste -sd ' ' Summary.txt | sed 's/\t/\n/g10; s/\t/@/g; s/\n/\t/g' | sed 's/.\nSample.*.avg//g' | head

私が得た最も近いものは次のとおりです。

cat Summary.txt | sed 's/ *| */,/g;/^$/d' | paste -d, - - - | head

しかし、これは最初の行から始まるので、すべてがマイナス1です。

Name criteria1 2 3 4 5 6 7 8 9 10 Sample12345 w x y z Sample12345.avg l m n
Sample12345.stdn o p q Sample98765 w2 x2 y2 z2 Sample98765.avg l2 m2 n2
Sample98765.stdn o2 p2 q2 ETC ETC

head -1 Summary.txt > Summary_temp_3.txt 後でもう一度追加できるようにしてみました。

sed '1d' Summary.txt > Summary_temp_4.txt
cat Summary_temp_4.txt | sed 's/ *| */,/g;/^$/d' |
  paste -d, - - - | sed 's/,.*_by_name//g | head

これはまったく何も表示しません。最終的にctrl-Cを押す必要があるので、それは時間がかからないので、それが間違っていると仮定します。助けてください。私は初心者であり、これはおそらく簡単に解決できる愚かな問題であることを知っていますが、さらに何を試すべきかわかりません。

ベストアンサー1

特にエレガントではありませんが、2番目の最後の行(2,$)の場合は、Next行とNext行をパターンスペースにインポートし、g改行文字の後の空白ではないシーケンスをグローバルに置き換えます。

sed '
2,${
N
N
s/\n[^[:blank:]]*//g
}
' Summary.txt
Name criteria1 2 3 4 5 6 7 8 9 10
Sample12345 w x y z l m n o p q
Sample98765 w2 x2 y2 z2 l2 m2 n2 o2 p2 q2

おすすめ記事