-1

これが私がやろうとしていることです。

ファイル1:

abc
bcd
cde
def
efg
fgh
ghi

ファイル 2:

ip:/vol0/scratch/&
ip:/vol0/sysbuild/
ip:/vol0/cde
ip:/vol0/mnt/cm/&
ip:/vol0/&
ip:/vol0/mnt/fgh
ip:/vol0/mnt/&

ご覧のようFile2に、いくつかの行の最後に があり、を対応する行に&置き換え、 のない行を無視する 必要 があります。ファイルの 4 行目に移動して、&File1&&&

シェルスクリプトでこれをどのように達成しますか。

4

5 に答える 5

0
paste file1 file2 | awk 'gsub( /&/, $1 )' | cut -f2-
于 2013-01-22T23:59:54.833 に答える
0

これはうまくいくかもしれません(GNU sed):

sed = file1 | sed -r 'N;s/(.*)\n(.*)/\1s|\&$|\2|/' | sed -f - file2
  1. sed = file1行番号を生成する
  2. sed -r 'N;s/(.*)\n(.*)/\1s|\&$|\2|/'行番号とデータ行を結合し、行番号をアドレスとして使用して sed 置換コマンドを生成します。
  3. sed -f - file2-fスイッチと標準入力を使用して、上記のコマンドを sed 呼び出しにフィードします-
于 2013-01-23T11:21:14.663 に答える
0

pasteと の使用awk:

$ paste file2 file1 | awk 'sub(/&\s+/,"")'
ip:/vol0/scratch/abc
ip:/vol0/mnt/cm/def
ip:/vol0/efg
ip:/vol0/mnt/ghi

出力で終わらない行が必要な場合は、100% 明確ではありませんでした&:

$ paste file2 file1 | awk '{sub(/&\s+/,"");print $1}'
ip:/vol0/scratch/abc
ip:/vol0/sysbuild/
ip:/vol0/cde
ip:/vol0/mnt/cm/def
ip:/vol0/efg
ip:/vol0/mnt/fgh
ip:/vol0/mnt/ghi

sed:

$ paste file2 file1 | sed -rn '/&/s/&\s+//p'
ip:/vol0/scratch/abc
ip:/vol0/mnt/cm/def
ip:/vol0/efg
ip:/vol0/mnt/ghi
于 2013-01-22T23:19:24.050 に答える
0
awk 'NR==FNR{a[NR]=$0;next} sub(/&/,a[FNR])' file1 file2
于 2013-01-22T23:30:44.753 に答える
0

これを試して

awk '{if (NR == FNR){f[NR]= $0;}else {gsub("&",f[FNR],$0); print $0}}' file1.txt file2.txt
于 2013-01-23T02:04:46.483 に答える