あるファイルから奇数文字と偶数文字列を置き換え、別のファイルに保存するbashスクリプトがあります。
#!/bin/bash
infile="inputfile"
outfile="outputfile"
{
while read -r odd && read -r even
do
echo "$even"
echo "$odd"
unset odd
done < "$infile"
# in case there are an odd number of lines in the file, print the last "odd" line read
if [[ -n $odd ]]; then
echo "$odd"
fi
} > "$outfile"
奇数と偶数を変える方法性格ファイルの各行に?
例:
入力ファイル:
one two three four five six
apple banana cocoa dish fish nuts
結果ファイル:
two one four three six five
banana apple dish cocoa nuts fish
答え1
使用幸せ(以前のPerl_6)
raku -ne 'put .words.rotor(2).map(*.reverse);'
または
raku -ne '.words.rotor(2).map(*.reverse).put;'
または
raku -ne '.words.rotor(2)>>.reverse.put;'
入力例:
one two three four five six
apple banana cocoa dish fish nuts
出力例:
two one four three six five
banana apple dish cocoa nuts fish
上記は、Perlシリーズのプログラミング言語であるRakuで書かれた答えです。つまり、raku
1行ずつ自動印刷ではなくフラグを使用してコマンドラインから呼び出されます。または、コマンドラインフラグを-ne
使用すると、各行はRakuの「テーマ変数」(Perlでは「テーマ変数」とも呼ばれます)とも呼ばれるにロードされます。先行点は、トピック変数に次の方法が適用されることを示す省略形です。連続したメソッドはドット演算子とともに連結され、各メソッドは順番に入力データを変換します。-ne
-pe
$_
$_
.
$_.
$_
.
これらの方法を見ると、1行ずつ入力された内容がスペースで区切られ、次に単語のペアwords
でrotor
まとめられていることがわかります(つまり、2
引数が提供されます)。関数名はrotor
多少あいまいかもしれませんが、データオブジェクトの個々の要素が繰り返されるかrotor
編集され、一緒にグループ化/集計されるという意味になります。 -ing 後、rotor
各ペアは使用および適用される機能によって個別に処理されます。最後に、出力は次のように印刷されます。map
reverse
put
上記のコード(rotor
デフォルトを使用)は、最後の「不完全な要素のセット」を削除します。最後に「不完全な要素セット」を維持するには、呼び出しを変更してrotor
Trueパラメータを追加するpartial
か、batch
同じ意味の次を使用します。
raku -ne 'put .words.rotor(2, partial => True).map(*.reverse);'
これは次のとおりです。
raku -ne 'put .words.rotor(2, :partial).map(*.reverse);'
これは次のとおりです。
raku -ne 'put .words.batch(2).map(*.reverse);'
答え2
sed
@guest_7が提案したものを提案します。
$ sed -e 's/\([^ ]\+\) \([^ ]\+\)/\2 \1/g' inputfile
two one four three six five
banana apple dish cocoa nuts fish
答え3
これを使用するには、perl
入力ワード配列(@ F)から2つの先行要素を切り取り、反転して出力配列(@ A)に追加します。
perl -slane 'my @A;
push @A, reverse splice @F, 0, 2
while @F > 1;
print @A, @F;
' -- -,=\ ./yourfile
シェル自体を使用してください。
cat yourfile |
while IFS= read -r l
do
set -f; set -- $l
while [ "$#" -gt 1 ]
do
printf '%s ' "$2" "$1"
shift 2
done
echo "${1-}"
done
awk '
{
t=$0;$0="";split(t, a)
for (i=1; i+1 in a; i+=2) {
$(i) = a[i+1]
$(i+1) = a[i]
}
if (i in a) $(i) = a[i]
}1
' yourfile
を通じて、python
我々はリストスライシングとリスト理解機能を活用します。
python3 -c 'import sys
with open(sys.argv[1]) as f:
for l in f:
F = l.strip().split()+[""]
print(*[f"{b} {a}" for a,b in zip(F[::2],F[1::2])])
' yourfile
答え4
#!/usr/bin/python
k=open('file1','r')
for line in k:
fina_list=[]
con=line.strip().split(' ')
for raco in range(0,len(con),2):
if (int(raco)%2 == 0):
odd_cha=con[raco+1]
even_cha=con[raco]
con[raco]=odd_cha
con[raco+1]=even_cha
fina_list.append(con[raco])
fina_list.append(con[raco+1])
print " ".join(fina_list)
出力
two one four three six five
banana apple dish cocoa nuts fish