私が持っているとしましょう:
$ cat tmp1.txt
a
b
c
それから
$ paste tmp1.txt <(tr '[:lower:]' '[:upper:]'<tmp1.txt)
a A
b B
c C
上記の内容をどのように修正できますか?
1/tmp1.txt
一度だけ電話しましたか? (おそらくtee
)
tmp1.txt
2/端末からコンテンツを提供します(コマンド出力で生成されたかのように)。このためにこれを修正してみましたが、それほど遠くは行きませんでした。
$ cat<< 'EOF' | tee >(tr '[:lower:]' '[:upper:]')
a
b
c
EOF
出力:
a
b
c
A
B
C
答え1
名前付きパイプを使用して、tee
次の間のデータの追加チャネルを作成しますtr
。
$ mkfifo pipe
$ tee pipe <file | paste - <( tr '[:lower:]' '[:upper:]' <pipe )
a A
b B
c C
または(あまり良いですが)tr
左に移動するには、次の手順を実行します|
。
$ mkfifo pipe
$ tee >( tr '[:lower:]' '[:upper:]' >pipe ) <file | paste - pipe
tr
変換するデータを提供するには、名前付きパイプが追加で必要ですpaste
。このpaste
ユーティリティは、生データと変換データの2つのストリームを読み取る必要があります。そのうちの1つは標準ストリームであり、もう1つは上記のように元のファイル(ファイルを2番目に読み取る)または名前付きパイプからインポートする必要があります。
答え2
簡単な解決策は次のとおりです。アッ
awk ' { print $0 , toupper($0) ; } ' /tmp/tmp1.txt
または
( echo a ; echo b ; echo c ; ) | awk ' { print $0 , toupper($0) ; } '
または、名前付きパイプまたはFIFOを使用してください。
( echo a ; echo b ; echo c ) |
(
D=$(mktemp -d) ;
(
cd $D ;
mkfifo fifo_a fifo_b ;
paste fifo_b <( tr '[:lower:]' '[:upper:]' < fifo_a ) &
tee fifo_a > fifo_b ;
wait ;
rm fifo_a fifo_b
) ;
rmdir $D
)