最新記事

unixコマンドから行末まで「[0-9]」以降の内容をすべて抽出します。
text-processing

unixコマンドから行末まで「[0-9]」以降の内容をすべて抽出します。

次の項目を含むファイルがあるとします。 5. variable1: 10. variable7: 230. variable21803: 「5」などを使わずに、すべての変数を出力にしたいと思います。私が試したことは grep -Po '(?<=^[0-9] )[.\n]+ ただし、結果は返されません。私はUNIXに初めて触れたので、助けてくれてありがとう。 以下は、前にスペースがある更新されたテストです。 ranodm text 1. variable1: 2. variable10: 3. variable302:

Admin

特定の文字を1対1に変換して、一部の文字を変更せずに他の文字を同じターゲット文字に置き換える方法は?
text-processing
sed
tr

特定の文字を1対1に変換して、一部の文字を変更せずに他の文字を同じターゲット文字に置き換える方法は?

次のファイルがありますfile.txt。 MAL TIRRUEZF CR MAL RKZYIOL EX MAL OIY UAE RICF "MAL ACWALRM DYEUPLFWL CR ME DYEU MAIM UL IZL RKZZEKYFLF GH OHRMLZH" 文字を次のように変更したいと思います。 M = T A = H L = E C = O R = F E = I X = S (Any other letter) = _ (Anything else) = (itself) 固定文字のオーバーライドがあります。 tr MALCREX THEOFIS < file.txt または: sed 'y/MALCREX/THEOFIS/' < file.txt しかし、私が言及した最後の2つの規則をどのように実施できますか?

Admin

csvファイルの最後の列(または数値がある他の列)に基づいてソート
text-processing
sort

csvファイルの最後の列(または数値がある他の列)に基づいてソート

次の内容を含むファイルがあります。行の残りの部分を維持しながら、最後の列(最後の列の3番目の列、他のファイルの場合)に基づいてファイルをソートしたいと思います。 ABC,DEF,GHI,-5,-8,-0.6,0.488 XYZ,JKL,MNO,3,-5,0.2,-0.342 STU,WXY,DEF,-1,4,0.01,0.345 このコマンドを使用すると、期待どおりに機能し、正しい結果が表示されます。 awk '{print $NF,$0}' FILE | sort -nr | cut -f2- -d' ' XYZ,JKL,MNO,3,-5,0.2,-0.342 STU,WXY,DEF,-1,4,0.01,0.345 ABC,DEF,GHI,-5,-8,-0.6,0.488 ただし、大きなファイルで同じコマンドを実行すると、誤った結果が発生します。 (並べ替えるファイルには4M行があります。)次のように入力します。 ABC,DEF,GHI,-5,-8,-0.6,0.0488 XYZ,JKL,MNO,3,-5,0.2,-0.0342 STU,WXY,DEF,-1,4,0.01,0.0345 JKL,JKL,GHI,-2,-3,0.31,-0.0524 QRS,GHI,YUT,-3,-1,0.20,-0.0503 HUR,JTL,ZST,1,1,0.52,-0.0556 FTT,JL,MKI,0,2,0.21,-0.0529 FTC,JKL,ERW,-1,6,0.23,-0.0441 HJI,MHP,VGT,1,-6,0.80,-0.0433 BUT,IOP,HGT,2,2,0.2,-0.0439 XYZ,BGY,MNO,-2,1,0.01,-0.0416

Admin

シェルスクリプトのコマンドラインが機能しません。
bash
shell-script
text-processing

シェルスクリプトのコマンドラインが機能しません。

スケジューラが呼び出すために、1行のコマンドをスクリプトに変換しようとしています。しかし、bashで実行するとコマンドは正常に機能しますが、シェルスクリプトで実行するとボットは機能しません。 $FILE1 ファイルに次のデータがあります。 1,Date,Country,Europe,6 2,Date,Country,America,22 3,Date,Country,America,22 4,Date,Country,Asia,9 5,Date,Country,Australia,29 予想される出力は、国名と20より大きい数値、および一意の値のみを入力することです。たとえば、次のようになります。 America, 22 MILLION Australia, 29 MILLION 私のコードは次のとおりです。一意の値を提供する代わりに、すべての重複値を提供します。 #This will only pull Country column i.e. America, Australia and so on... grep "Country" FILE1|cut -f4 "," > $FILE2 #This will use the keyword America from FILE2 and search in FILE1 for associated count and copy in FILE3 for i in $(cat $FILE2); do cat $FILE1|grep "Country"|grep $i|echo $i, `wc -l` MILLION >> $FILE3; done; #Now that we have both country name and count...we will find countries only with >20 count for a in $(cat $FILE3); do awk -F "," '$2 > 20' $FILE3 |sort -u > $FILE4 done; #Send the final file to email echo "Here is the data"|mailx -s "Population data" -a FILE4 user@email 2番目の質問は、どうすれば良い方法でフォーマットできますか?たとえば、 America has more than 22 million population Australia has more than 29 million population 変える America, 22 million Australia, 29 million ありがとうございます。基本的な質問ならすみません。私はちょうどUnixスクリプトの作業を始めました。

Admin

'join'ユーティリティレポート:ファイルはソートされていませんが、実際にはソートされました。
text-processing
text-formatting
join

'join'ユーティリティレポート:ファイルはソートされていませんが、実際にはソートされました。

t12つのファイルがありますt2。 root@localhost:~# root@localhost:~# cat t1 udp UNCONN 0 0 0.0.0.0:68 0.0.0.0:* users:(("dhclient",pid=479,fd=7)) 479 tcp LISTEN 0 128 127.0.0.1:6060 0.0.0.0:* users:(("gggg-ruit",pid=24968,fd=5)) 24968 root@localhost:~# root@localhost:~# cat t2 root 88 0.0 0.0 0 0 ? I< Jan06 0:00 [scsi_tmf_0] root 96 0.0 0.0 0 0 ? I< Jan06 0:00 [ipv6_addrconf] root 24965 0.0 0.2 11592 3004 ? S Jan12 0:00 bash /root/restart_gggg.sh root 24968 0.7 5.2 112488 53472 ? Sl Jan12 30:52 /usr/local/bin/gggg-ruit -singleInstance :44444 t1の8列とt2の2列に結合したいです。私はそれらを順番にまとめました。それを証明しましょう。 root@localhost:~# awk '{print $8}' t1 479 24968 root@localhost:~# awk '{print $2}' t2 88 96 24965 24968 今すぐjoin使用すると、次のエラーが発生します。 root@localhost:~# join -1 8 -2 2 -o 2.1,2.2,1.1,1.2,1.5,1.6,2.11 t1 t2 join: t2:3: is not sorted: root 24965 0.0 0.2 11592 3004 ? S Jan12 0:00 bash /root/restart_gggg.sh root@localhost:~# t2が行3にソートされていないと言うのはなぜですか?ご覧のとおり、すでに結合列に配置されています。

Admin

テキストの数字を範囲内の任意の数字に置き換えます。
text-processing

テキストの数字を範囲内の任意の数字に置き換えます。

今私のテキストは次のようになります "xyz1" zyx1 "http://xyz1" zyx1 "xyz1" zyx1 出力が次のように見えるように、1範囲内の任意の数字に置き換える必要があります。1-5 "xyz3" zyx2 "http://xyz1" zyx5 "xyz4" zyx1 zyxまたはxyz1-5に置き換えるには、1の前に表示する必要があります。

Admin

Bashはその行のすべての内容を返し、行を空白のままにします。
text-processing
sed
command-line
command

Bashはその行のすべての内容を返し、行を空白のままにします。

テキストファイルを変更したいです。 22行にテキストがあり、22行を空白のままにして、22行のテキストを23行に移動したいとしましょう。これを説明するために()に変更したいと思いますprintf 'Some %d text\n' {1..23}。 Some 1 text Some 2 text Some 3 text Some 4 text Some 5 text Some 6 text Some 7 text Some 8 text Some 9 text Some 10 text Some 11 text Some 12 text Some 13 text Some 14 text Some 15 text Some 16 text Some 17 text Some 18 text Some 19 text Some 20 text Some 21 text Some 22 text Some 23 text 以下を入力してください: Some 1 text Some 2 text Some 3 text Some 4 text Some 5 text Some 6 text Some 7 text Some 8 text Some 9 text Some 10 text Some 11 text Some 12 text Some 13 text Some 14 text Some 15 text Some 16 text Some 17 text Some 18 text Some 19 text Some 20 text Some 21 text Some 22 text Some 23 text どうすればいいですか?

Admin

IDSが一致せず、列数が可変であっても、IDに基づいてCSVファイルをマージできます。
shell-script
text-processing
awk
csv
join

IDSが一致せず、列数が可変であっても、IDに基づいてCSVファイルをマージできます。

私はbashスクリプトを作成していますが、プロセスの一部では、列の整合性を維持しながらcsvファイルを一緒にリンクする必要があります。たとえば、次の形式の2つのファイルがあります。 F1 ID,MD,L1,L2,L3,GD,L4 12,OB,AA,PP,AA,TT,AA 15,OB,PP,PP,PP,TT,AA F2 ID,MD,L7,L8,L9,L10,GD 13,OB,PP,AA,AA,AA,AA 15,OB,PP,PP,PP,AA,AA 出力は次のとおりです。ここで、一致しないID戻り値はNMであり、重複列(この場合は「GD」)は各ファイルの値に基づいて表示されます。 ID,MD,L1,L2,L3,GD,L4,L7,L8,L9,L10,GD 12,OB,AA,PP,AA,TT,AA,NM,NM,NM,NM,NM 13,NM,NM,NM,NM,NM,NM,PP,AA,AA,AA,AA 15,OB,PP,PP,PP,TT,AA,PP,PP,PP,AA,AA 私はjoinそれが有望に見えるので、それをやってきました。join -t, -eNM -a1 -a2 -o 0,1.2,1.3,1.4,1.5,1.6,1.7,1.8,2.3,... F1 F2 しかし、いくつかの問題が発生しました。 このオプションを使用すると、-o各ファイルごとに独立して異なる正確な列数がわかっていると仮定します。 結果でエラーが発生しました: join: REPORT_2|15-10-2019|15:39:25.csv:5: is not sorted: 04181646 代替案があればjoin提案を受け入れます。ありがとうございます。

Admin

列サブセットを作成し、対応する長さに分割します。
text-processing
awk

列サブセットを作成し、対応する長さに分割します。

特定の値(>> 2など)でサブセットを指定し、列の最初の数字の合計数で割りたい列があります。どうすればいいですか? サブセット>= 2の例: 入力:このような列 1 1 1 1 2 2 出力: 2/6=0.33333 私はawkを使ってこのようなことを試しました。 awk '($1 > 2) / $1' myfile しかし、これはうまくいきません。

Admin

列の一部に基づいてCSVファイルを分割する
bash
text-processing
awk

列の一部に基づいてCSVファイルを分割する

file.csv次の日付と時刻を含むCSVファイルがあります。 id0,2020-12-12T07:18:26,7f id1,2017-04-28T19:59:00,80 id2,2017-04-28T03:14:35,e4 id3,2020-12-12T23:45:09,ff id4,2020-12-12T09:12:34,a1 id5,2017-04-28T00:31:54,65 id6,2020-12-12T20:13:47,45 id7,2017-04-28T21:04:30,7f 2列の日付に基づいてファイルを分割したいです。上記の例では、次の2つのファイルが生成されます。 file_1.csv id1,2017-04-28T19:59:00,80 id2,2017-04-28T03:14:35,e4 id5,2017-04-28T00:31:54,65 id7,2017-04-28T21:04:30,7f そして file_2.csv id0,2020-12-12T07:18:26,7f id3,2020-12-12T23:45:09,ff id4,2020-12-12T09:12:34,a1 id6,2020-12-12T20:13:47,45 sortこれを試してみましたが、awk日付と時刻に基づいてファイルを8つのファイルに分割します。 sort -k2 -t, file.csv | awk -F, '!($2 in col) {col[$2]=++i} {print > ("file_" i ".csv")}' 日付と時刻ではなく日付のみに基づいてファイルを分割する方法は?

Admin