0

これを行うには、おそらくもっと簡単な方法があることを知っていると言うことから始めましょう。しかし、これは私が持っているものであり、うまくいけば、最後にいくつかの改善や簡素化を行うことができます.

現時点での目標

以下の変数に格納された出力をダブル スペースにするには、$tmp各行に個別に番号を付けます。これを行うと、実行可能なコマンドの各セットが別々の行に表示されます。

問題1

変数の内容を2倍にするために、考えられるすべてのことを試しました。ダブル スペース コマンドを移動し、コマンド自体を変更します。

このコードを変更しようとしたファイルに番号を付けるには:

 sed = filename | sed 'N; s/^/ /; s/ *\(.\{6,\}\)\n/\1 /

そしてもちろん、awkを試してみましたが、進歩はありません..

それほど長期的な目標ではない

  • これらのコマンドを 1 つずつ実行し、バイトの違いを比較します。または、一般的な違いだけです。この時点で、diff コマンドを使用して、file1 file2次のような変数に出力を保存できることを知っ"$diffA $diffB"ています。2 つ以上のファイルが引数として渡される可能性があるため、ループを使用して毎回更新します。
  • 各コマンドラインの違いを教えてください。そして、次のようなものをエコーし​​ます:

file1 の 1 行目は file2 の 1 行目とは異なります。確認してください: "$diffA $diffB"

これが私がこれまでに持っているものです。その始まりです:

#!/bin/bash

FILE="$1"

echo "You Entered $FILE"

if [ -f $FILE ]; then

tmp=$(cat $FILE | sed '/./!d' | sed -n '/regex/,/regex/{/regex/d;p}'| sed -n '/---/,+2!p' | sed -n '/#/!p' | sed 's/^[ ]*//' | sed -e\
s/[^:]*:// | sed -n '/regex /!p' | sed -n '/regex /!p' | sed -n '/"regex"/,+1!p' | sed -n '/======/!p' | sed -n '/regex/!p' | sed -n '/regex\
\r/!p' | sed -n '/regex /!p' )

fi

MyVar=$(echo $tmp)

echo "$MyVar | sed G"

FILE2="$2"
if [ -f $FILE2 ]; then
    if [ -f $FILE2 ]; then
         tmp2=$(cat $FILE2 | sed -n '/regex/,/regex/{/regex\ S/d;p}' |\ 
sed -n '/#/!p' | sed -e s/[^:]*:// | sed /--------/,+10d)
     fi


echo "$tmp2"

どんな助けでも大歓迎です。

4

3 に答える 3

1

次のawkスクリプトは、出力のスペースを2倍にし、行に番号を付けます。

awk ' { print NF " " $0; print ""; }'

あなたの問題はこれを変数に割り当てることです:

( echo a; echo b) | awk ' { print NR " " $0; print ""; }'

与える:

1 a

2 b

しかし

tmp=$(( echo a; echo b) | awk ' { print NR " " $0; print ""; }')
echo "$tmp"

与える

1 a 2 b

$()を使用すると、改行が空白に置き換えられるためです。一時ファイルを使用する必要があります。

tmp=$(mktemp)
awk ' { print NR " " $0; print ""; }' $FILE > $tmp
cat $tmp # Do something with the file
rm $tmp # Don't forget to clean up after yourself.
于 2008-12-05T11:41:21.053 に答える
0

一時ファイルを使用する代わりに、引用符を使用して改行/スペースの置換を抑制することもできます。

tmp="$(echo a; echo b)"
echo "$tmp"
于 2009-12-05T10:55:31.730 に答える
0

これはあなたのために働くかもしれません:

a=$(printf "aaa %d\n" {1..5} | sed = | sed 'N;s/\n//;G')
echo $a
1aaa 1 2aaa 2 3aaa 3 4aaa 4 5aaa 5
echo "$a"
1aaa 1

2aaa 2

3aaa 3

4aaa 4

5aaa 5

説明:

  1. sed =行番号を挿入し、改行を追加してから行を追加します
  2. sed 'N's/\n//;G'改行を追加し、別の行を読み取って追加します。s/\n//埋め込まれた改行を削除します。G行末に改行を追加します。サイクルの最後に、改行が再度追加されてから出力されます。
于 2011-12-25T06:17:33.793 に答える