" - "で区切られた2つの値の間のすべての数値を出力しようとしています。 私はこのように見ている複数の行を持つ文書があります:私はのような結果が欲しい変数を " - "で区切って出力するにはawkを使用してください
14 - 19 |
45 - 50 |
:
14 15 16 17 18 19
45 46 47 48 49 50
しかし、私は、私が設定しているが、同じ行のすべての値を取得しておくとORSとOFS。
紛失しているものはありますか?
" - "で区切られた2つの値の間のすべての数値を出力しようとしています。 私はこのように見ている複数の行を持つ文書があります:私はのような結果が欲しい変数を " - "で区切って出力するにはawkを使用してください
14 - 19 |
45 - 50 |
:
14 15 16 17 18 19
45 46 47 48 49 50
しかし、私は、私が設定しているが、同じ行のすべての値を取得しておくとORSとOFS。
紛失しているものはありますか?
が、これははるかに単純で直接的です::
あなたはprintf
isteadを使用することができます
$ awk '{for (i=$1+0;i<=$(NF-1);i++){printf "%d ", i};print ""}' list.txt
14 15 16 17 18 19
45 46 47 48 49 50
は、末尾の防止のためのスペース(感謝@fedorqui):
awk '{for (i=$1+0;i<$3+0;i++){printf "%d ", i};print ""$3}' list.txt
#!/bin/bash
awk ' BEGIN{OFS=" ";
RS="|";
FS=" ";
ORS=" "};
{
for (i=1; i<=NF ; i++)
{
if ($i == "-")
{
st=$(i-1);
en=$(i+1);
st++;
while (st < en)
{
print st;
st++;
}
}
else
print $i;
}
}' list.txt
各print
別レコードとして扱うので、末尾にORS
を追加しています。
#!/bin/bash
awk ' BEGIN{
RS="|";
FS=" ";};
{
for (i=1; i<=NF ; i++)
{
if ($i == "-")
{
st=$(i-1);
en=$(i+1);
st++;
while (st < en)
{
printf "%d ", st;
st++;
}
}
else
printf "%d " $i;
}
printf "\n"
}' list.txt
この解決方法は、行が標準形式でない場合にも有効です。のような:2054 | 127 1702 - 1705 1707 1710 - 1713 1715 1723 1728 | 3061 3082 3526 3725 | – olivia
あなたは 'awk'スクリプトを'#!/ usr/bin/awk -f'行を先頭にして独自のファイルに入れることができますdをファイル名を引数として独自のスクリプトとして実行しますか? – Kusalananda