-3

私はテキストファイルに01-01-2013.txtと言ってもらい、以下のような内容を持っています

cat 01-01-2013.txt | cut -d',' -f1-10 | head -6
TIMESTAMP,DATE,HOUR_MINUTE,CAWFM,CSQ2,DBCRIS.CA.MSG,DBI.MSBR.INCOMING.Q,DBI.MSBR.INCOMING.Q.ERROR,DBT.CA.RECEIVE.CUST,DBT.CA.RECEIVE.CUST.エラー
20130101000019,01.01.2013,00:00,0,0,0,0,0,6893,31
20130101000133,01.01.2013,00:01,0,0,0,0,0,6858,31
20130101000246,01.01.2013,00:02,0,0,0,0,0,6661,31
20130101000359,01.01.2013,00:03,0,0,0,0,0,6314,31
20130101000512,01.01.2013,00:05,0,0,0,0,0,6074,31

列の数を見つけようとしたときに、以下のコマンドを使用しましたが、以下のように期待される結果が得られません。1を返すだけです

awk 'BEGIN {IFS=","};END{print NF}' 01-01-2013.txt

結果

1

列の総数を調べるのを手伝ってください。

4

3 に答える 3

2

awkname を使用しないため、この例は機能しませんIFS。入力フィールド区切り記号が呼び出されますFS(ただしOFS、出力フィールド区切り記号には使用されます)。

$ awk 'BEGIN{FS=","}END{print NF}' csv
10

ただし、ファイル全体を読み取らずに、たとえば最初の行のみを読み取ることもできます。

$ awk -F, 'NR==1{print NF;exit}' csv
10

または一致する最初の行/,/

$ awk -F, '/,/{print NF;exit}' csv
10

cut最初の 2 つの列のみを削除したい場合は、質問のように固執しない理由がわかりません。

$ cut -d, -f3- csv
HOUR_MINUTE,CAWFM,CSQ2,DBCRIS.CA.MSG,DBI.MSBR.INCOMING.Q,DBI.MSBR.INCOMING.Q.ERROR,DBT.CA.RECEIVE.CUST,DBT.CA.RECEIVE.CUST.ERROR
00:00,0,0,0,0,0,6893,31
00:01,0,0,0,0,0,6858,31
00:02,0,0,0,0,0,6661,31
00:03,0,0,0,0,0,6314,31
00:05,0,0,0,0,0,6074,31
于 2013-05-11T07:30:11.503 に答える
0

列の総数を確認するには:

入力ファイル

TIMESTAMP,DATE,HOUR_MINUTE,CAWFM,CSQ2,DBCRIS.CA.MSG,DBI.MSBR.INCOMING.Q,DBI.MSBR.INCOMING.Q.ERROR,DBT.CA.RECEIVE.CUST,DBT.CA.RECEIVE.CUST.ERROR
20130101000019,01.01.2013,00:00,0,0,0,0,0,6893,31
20130101000133,01.01.2013,00:01,0,0,0,0,0,6858,31
20130101000246,01.01.2013,00:02,0,0,0,0,0,6661,31
20130101000359,01.01.2013,00:03,0,0,0,0,0,6314,31
20130101000512,01.01.2013,00:05,0,0,0,0,0,6074,31

Awk コード

awk 'BEGIN {FS=","} ; END{print NF}' Input_file

出力

10

Perl ソリューション

#! /usr/bin/perl

use strict;
use warnings;

my @cols = split(',', $_);
my $n = @cols;
print "row $. =  $n columns\n";

コードを code.pl として保存し、次のように実行します。

$> perl -n code.pl Input_file

Perl 出力

row 1 =  10 columns
row 2 =  10 columns
row 3 =  10 columns
row 4 =  10 columns
row 5 =  10 columns
row 6 =  10 columns
于 2013-05-11T16:22:23.810 に答える
0
$ awk '{print NF}' FS=, 01-01-2013.txt
10
10
10
10
10
10
于 2013-05-11T07:14:57.077 に答える