以下は、改行を含む貼り付けコマンドの弱い試みです。
paste -d -s tmp1 tmp2 \n tmp3 \n tmp4 tmp5 tmp6 > tmp7
デフォルトでは、各tmpにはいくつかの行があり、出力を読みたいです。
First(tmp1) Last(tmp2)
Address(tmp3)
City(tmp4) State(tmp5) Zip(tmp6)
貼り付けコマンドに改行文字を使用すると、基本から外れますか?
完成した製品は次のとおりです。助けてくれてありがとう!
cp phbook phbookh2p5
sed 's/\t/,/g' phbookh2p5 > tmp
sort -k2 -t ',' -d tmp > tmp0
cut -d',' -f1,2 tmp0 > tmp1
cut -d',' -f3 tmp0 > tmp2
cut -d',' -f4,5,6 tmp0 > tmp3
echo "" > tmp4
paste -d '\n' tmp1 tmp2 tmp3 tmp4 > tmp7
sed 's/\t/ /g' tmp7 > phbookh2p5
cat phbookh2p5
rm tmp*; rm phbookh2p5
答え1
2つの追加の一時ファイルを使用してこの回避策を試してください。
paste tmp1 tmp2 > tmp12
paste tmp4 tmp5 tmp6 > tmp456
paste -d "\n" tmp12 tmp3 tmp456 > tmp7
-d
このソリューションは、オプションが区切り文字を選択するという前提に基づいています。グローバルすべての入力ファイルに対して空です。または改行文字。これは、後のイベントが-d
前のイベントを上書きするため、ある程度真実です。ただし、@DigitalTraumaが指摘したように、順次使用される複数の区切り文字を提供できます。したがって、@DigitalTraumaのソリューションは、追加の一時ファイルを完全に防ぐため、私のソリューションよりもエレガントです。
私のソリューションのニッチアプリケーションは、1つ以上の区切り文字がある状況です。それぞれ1つ以上の文字使用する必要があります。このオプションだけでは不可能です-d
。
答え2
paste
私はマニュアルページのこの部分があなたが望むものだと思います:
-d, --delimiters=LIST reuse characters from LIST instead of TABs
したがって、この行はあなたの場合に適しているはずです。
paste -d" \n\n " tmp1 tmp2 tmp3 tmp4 tmp5 tmp6 > tmp7
@DopeGhotiのサンプルデータで期待どおりに作業:
$ grep . tmp*
tmp1:Bill
tmp1:Bob
tmp2:Kerman
tmp2:Germin
tmp3:123 Main St.
tmp3:321 Sesame St.
tmp4:Kerbopalis
tmp4:Kerbington
tmp5:Kerbskatchewan
tmp5:Kermont
tmp6:12345
tmp6:31416
$ paste -d" \n\n " tmp1 tmp2 tmp3 tmp4 tmp5 tmp6
Bill Kerman
123 Main St.
Kerbopalis Kerbskatchewan 12345
Bob Germin
321 Sesame St.
Kerbington Kermont 31416
$
paste
私はGNU Coreutils 5.97と8.21とBSD(OS X)を使って正常にテストしました。異なるバージョンのペーストがあるかどうかはわかりません。
答え3
このコマンドは機能するはずです。
paste -s tmp1 tmp2 -d '\n' tmp3 -d '\n' tmp4 tmp5 tmp6 > tmp7
答え4
sort -dk2,2 phpbook |
sed "s/\t/\n/3;s//\n/2;s// /g"
phpbook
私が理解したところによると、次のような電話帳のエントリ行を含むファイルがあります。
{first}\t{last}\t{address}\t{city}\t{state}\t{zip}
これを並べ替え{last}
てから改行を追加し、各項目に対してABSをに変換してから結果をとして印刷しようとしています。そうでなければ、あなたのコマンドが何をするのかわかりません。しかし、時には非常に密になることがあります。 {last}
{address}
\t
<spaces>
stdout
デフォルトではsort
文字で区切られているので、<TAB>
次のようになります。
sed 's/\t/,/g' | sort ... -t ,
…おそらくやる価値がないようです。
もう少し考えてみると、区切り記号が混在している可能性が高く、sed
これを標準化するためにイニシャルがあるようです。言葉になりますね。おそらく:
1,2\t3\t4,5,6
...または他のもの。この場合、一種の初期翻訳が必要です。それから多分...
tr , \\t <phbook | sort ... | sed ...
効果が良くなります。返品...
sort ... -k 2
...可能sort
極端な場合は問題が発生します。なぜなら、それを使うと、ただ2番目のフィールド、2番目のフィールドから行末まで。一般に、人々はこれを行うときに-k2,2
データsort
の考慮事項を制限したいと考えています。ただ2番目のフィールド。
次のように補助キーを追加することも価値があるかもしれません。
...sort -dk2,2 -k1,1
...これはsort
主に城について第二名前について。このようにしてジェッド・スミスフォローするアルファスミス毎回。
とにかく、私が正しい場合、上記sort | sed
のパイプは完全な作業を行う必要があります。私はあなたが私が使っている風景をsed
理解すると仮定し\e
ますが、そうでない場合は、sed
引用したスクリプトを次のように置き換えることができます。
s/<literal TAB>/\
/3;s//\
/2;s// /g