複数の文字があります。
Name 1:10:34 date short_id 10
Name 1:10:45 date short_id 10
Name 1:20:54 date short_id 20
Name 1:30:43 date short_id 30
Name 1:40:43 date short_id 40
Name 1:40:13 date short_id 40
Name 1:20:01 date short_id 20
Name 1:10:01 date short_id 10
5番目の列を交換したいのですが、 sed 's/\b10\b/user1/g'
2番目の列を使用しています。
出力は次のようになります。
Name 1:10:34 date short_id user1
Name 1:10:45 date short_id user1
Name 1:20:54 date short_id user2
Name 1:30:43 date short_id user3
Name 1:40:43 date short_id user4
Name 1:40:13 date short_id user4
Name 1:20:01 date short_id user2
Name 1:10:01 date short_id user1
- - 更新 - -
user1がなければ名前があり、2番目の列は時間に過ぎず、名前とは何の関係もありません。
このような
Name 1:10:34 date short_id John
Name 1:10:45 date short_id John
Name 1:20:54 date short_id Robert
Name 1:30:43 date short_id Jennifer
Name 1:40:43 date short_id Mary
Name 1:40:13 date short_id Mary
Name 1:20:01 date short_id Robert
Name 1:10:01 date short_id John
答え1
まあ、残念ながらそれはsed
わかりません。したがって、各ユーザーに対して別の代替ファイルを作成したくない場合は、次の変換テーブルを持つ2番目のファイルを使用することをお勧めします。10
John
users.txt
10 John
20 Robert
30 Jennifer
40 Mary
次に、両方のファイルをsed
このコマンドに入力します。
sed '/^[0-9]* [[:alnum:]]*$/{H;d;};G;s/ \([0-9]*\)\n.*\n\1 \([[:alnum:]]*\)/ \2/;P;d' users.txt yourfile.log
翻訳テーブルを最初に読み、保存スペースに保存します。他のファイルでは、翻訳を含む予約済みスペースが追加され、可能であれば交換が行われます。その後、P
最初の改行文字まで行のみが印刷されるため、ユーザーIDが不明な場合は誤った印刷は行われません。
もっと詳しい説明が気になったらあるファイルで定義されたコンテンツを別のファイルに置き換える方法または楽に聞いてください。
答え2
2つのawkソリューションもあります。
$ awk '{$5="user"substr($5,1,1)}1' file
Name 1:10:34 date short_id user1
Name 1:10:45 date short_id user1
Name 1:20:54 date short_id user2
Name 1:30:43 date short_id user3
Name 1:40:43 date short_id user4
Name 1:40:13 date short_id user4
Name 1:20:01 date short_id user2
Name 1:10:01 date short_id user1
$
$ awk '{$5="user"$5/10}1' x1
Name 1:10:34 date short_id user1
Name 1:10:45 date short_id user1
Name 1:20:54 date short_id user2
Name 1:30:43 date short_id user3
Name 1:40:43 date short_id user4
Name 1:40:13 date short_id user4
Name 1:20:01 date short_id user2
Name 1:10:01 date short_id user1
$
答え3
awk 'gsub(/0/, "", $5) { print $1, $2, $3, $4, "user" $5 }' INPUT
gsub は、5 番目の列から数字「0」を削除します。その後、awkは列1〜4を印刷し、「user」という単語を列5と組み合わせます(「user」と$ 5の間には「、」はありません)。
答え4
使用sed
sed 's/\(.*\) \(.\).*/\1 user\2/' input_file
Name 1:10:34 date short_id user1
Name 1:10:45 date short_id user1
Name 1:20:54 date short_id user2
Name 1:30:43 date short_id user3
Name 1:40:43 date short_id user4
Name 1:40:13 date short_id user4
Name 1:20:01 date short_id user2
Name 1:10:01 date short_id user1