我有一行txt文件:
2017-06-15 Take the car for inspection to change the wheels.mkd
2018-03-17 Crear un entorno virtual con Docker y xfce.mkd
2018-02-25 Envíar vídeo de explicación de configuración email de tunegocioenlanube a María.mkd
2018-03-08 crear curso tu formula emocional +tunegocio.mkd
我想在年,月,日中加入一系列bash:
year=( "2017","2018" )
month=( "03","06","02" )
day=( "08","15","17","25" )
谢谢大家。
答案 0 :(得分:1)
您可以使用正则表达式解决此问题。请参阅awk
或sed
但是,如果正则表达式对你来说太复杂了,你可以使用cut
命令以更简单的形式解决问题。
cut
是一个允许获取一行特定部分的命令(类似于在其他语言中分割)。
您只需使用-d选项设置分隔符,然后使用-f
选择字段在您的情况下,您可以在文件的每一行中使用:
date=$(echo $line | cut -d " " -f 1)
year=$(echo $date | cut -d "-" -f 1)
month=$(echo $date | cut -d "-" -f 2)
day=$(echo $date | cut -d "-" -f 3)
有了这个,您可以获得所需的字段。然后,您可以将其保存在数组或任何您需要的地方
要将元素添加到现有数组,您可以阅读以下文章:https://unix.stackexchange.com/questions/328882/how-to-add-remove-an-element-to-from-the-array-in-bash
并且,要逐行读取文件,请执行以下操作: Read a file line by line assigning the value to a variable
答案 1 :(得分:1)
如果订单不重要,那么您可以使用以下内容:
mapfile -d '' day < <(printf '%s\0' "${!days[@]}" | sort -zn)
如果要对输出数组中的值进行排序,则可以将最终分配更改为例如:
days
这将打印day
中的每个键后跟一个空字节,并按数字顺序对它们进行排序,将结果保存到数组static string Data(string tableName, string columnNames, string orderBy)
{
var type = Assembly.GetExecutingAssembly().GetTypes().FirstOrDefault(i => i.Name == tableName);
using (var context = new BloggingEntities())
{
var data = Select(type, columnNames, orderBy, context);
var str = JsonConvert.SerializeObject(data);
return str;
}
}
static string Select(Type type, string columnNames, string orderBy, BloggingEntities _dbContext)
{
var data = _dbContext.Set(type).AsNoTracking().AsQueryable();
var selectStatement = "new ( " + columnNames + ")";
var filtered = data.Select(selectStatement).OrderBy(orderBy);
return JsonConvert.SerializeObject(filtered);
}
中。
答案 2 :(得分:1)
你可以这样做:
year=($(grep -Po '^\d+[^-]' InputFile.txt | uniq))
month=($(grep -Po '(?<=-)[0-9]+(?=-)' InputFile.txt | sort -u))
day=($(grep -Po '(?<=-)[0-9]+(?= )' InputFile.txt) | sort -u))
示例输出echo ${day[@]}
:
08 15 17 25
答案 3 :(得分:0)
while read Line
do
echo $Line
var1=`echo "$Line" | awk 'BEGIN{FS=" "} {print $1}' | awk 'BEGIN{FS="-"} {print $1}'`
var2=`echo "$Line" | awk 'BEGIN{FS=" "} {print $1}' | awk 'BEGIN{FS="-"} {print $2}'`
var3=`echo "$Line" | awk 'BEGIN{FS=" "} {print $1}' | awk 'BEGIN{FS="-"} {print $3}'`
year+=("$var1")
month+=("$var2")
day+=("$var3")
done < array.txt
上面的bash代码将从array.txt逐个读取行,提取值并将其存储在数组中。要打印数组中的所有值,可以使用以下命令:
printf '%s\n' "${year[@]}"
printf '%s\n' "${month[@]}"
printf '%s\n' "${day[@]}"