Этот ответ использует тот же подход, что и ответ Индера , но внутри одной команды awk
, которая могла бы быть быстрее. Не то чтобы это имело значение в этом случае ... Здесь мы предполагаем, что файл, указанный в вашем примере, в качестве входных данных, см. Следующий раздел для альтернативных форматов ввода.
awk 'NR>1 { system("mkdir -p dir"$2"; mv "$1"-* dir"$2) }' dataframe.csv
В вашем примере это выполняет следующие команды bash
:
mkdir -p dir0
mv abc-* dir0
mkdir -p dir0
mv def-* dir0
mkdir -p dir2
mv abg-* dir2
mkdir -p dir1
mv poc-* dir1
mkdir -p dir4
mv qrs-* dir4
Опция -p
в mkdir
не вызовет ошибку, если каталог уже существует. С помощью mv abc-* dir0
мы перемещаем все файлы, начиная с abc-
, в каталог dir0
.
Из комментариев кажется, что ваш фактический файл имеет другой формат, чем пример, который вы показали нам. В примере столбцы были разделены пробелами
animal class
abc 0
def 0
abg 2
...
, но ваш реальный файл выглядит как настоящий csv со столбцами, разделенными запятыми. Кроме того, файл, кажется, имеет окончания строки Windows (\r\n
вместо \n
).
animal,class\r
abc,0\r
def,0\r
abg,2\r
...
Вы можете использовать этот формат, адаптируя специальные переменные awk
FS
(для разделителя полей) и RS
(для разделителя записей):
awk -F, -v RS='\r?\n' 'NR>1 { system("mkdir -p dir"$2"; mv "$1"-* dir"$2) }' dataframe.csv
Windows, C / C ++:
#include <windows.h>
SYSTEM_INFO sysInfo, *lpInfo;
lpInfo = &sysInfo;
::GetSystemInfo(lpInfo);
switch (lpInfo->wProcessorArchitecture) {
case PROCESSOR_ARCHITECTURE_AMD64:
case PROCESSOR_ARCHITECTURE_IA64:
// 64 bit
break;
case PROCESSOR_ARCHITECTURE_INTEL:
// 32 bit
break;
case PROCESSOR_ARCHITECTURE_UNKNOWN:
default:
// something else
break;
}
C #, независимая от ОС
sizeof(IntPtr) == 4 ? "32-bit" : "64-bit"
Это несколько грубо, но в основном говорит вам, работает ли CLR 32-битным или 64-битным, что, скорее всего, вам нужно знать. Например, CLR может работать как 32-разрядный на 64-разрядном процессоре.
Дополнительную информацию см. Здесь: Как обнаружить 64-разрядную платформу Windows с .NET?
Сложность в том, что у вас может быть 64-битный ЦП, но 32-битная ОС. Если вам небезразличен этот случай, для запроса процессора потребуется заглушка asm. Если нет, вы можете легко спросить ОС.
То, что вы сделали, вполне разумно. Несколько дополнительных пунктов:
Когда Maven получает артефакт от Nexus, артефакт именуется как artifactId-версия. GroupId досадно опущен. Таким образом, когда артефакт перемещается (скажем, копируется в WEB-INF / lib в веб-приложении), ваш файл jar будет читать « gdata-analytics-1.0 ». Это обычно не проблема. Однако, если имя артефакта очень распространено, например «util», вы можете включить информацию о группе в artifactId, например, используя groupId из « com.google » и artifactId из « com.google.gdata-аналитика ». Да, повторение раздражает, но обеспечивает максимальную ясность в файловой системе и при поиске. У меня действительно была проблема, когда два разных идентификатора группы имели "
В Python:
In [10]: import platform
In [11]: platform.architecture()
Out[11]: ('32bit', 'ELF')
Как обычно, довольно аккуратно. Но я почти уверен, что эти функции возвращают платформу, на которой был создан exec, а не платформы, на которых он работает. Все еще есть небольшая вероятность, что какой-нибудь компьютерный компьютер использует 32-битную версию на 64-битном компьютере.
Вы можете получить дополнительную информацию, например:
In [13]: platform.system()
Out[13]: 'Linux'
In [19]: platform.uname()
Out[19]:
('Linux',
'asus-u6',
'2.6.28-11-generic',
'#42-Ubuntu SMP Fri Apr 17 01:57:59 UTC 2009',
'i686',
'')
ETC.
Это больше похоже на данные в реальном времени: -)
В .NET вы можете отличить x86 от x64, посмотрев на свойство Size структуры IntPtr. Свойство IntPtr.Size возвращается в байтах, по 8 бит на байт, поэтому оно равно 4 для 32-разрядного ЦП и 8 для 64-разрядного ЦП. Поскольку мы говорим о 32-битных и 64-битных процессорах, а не о 4-байтовых или 8-байтовых процессорах, мне нравится проводить сравнение в битах, чтобы прояснить, что происходит.
C #
if( IntPtr.Size * 8 == 64 )
{
//x64 code
}
PowerShell
if( [IntPtr]::Size * 8 -eq 64 )
{
#x64 code
}
VBScript, Windows:
Const PROCESSOR_ARCHITECTURE_X86 = 0
Const PROCESSOR_ARCHITECTURE_IA64 = 6
Const PROCESSOR_ARCHITECTURE_X64 = 9
strComputer = "."
Set oWMIService = GetObject("winmgmts:" & _
"{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcessors = oWMIService.ExecQuery("SELECT * FROM Win32_Processor")
For Each oProcessor In colProcessors
Select Case oProcessor.Architecture
Case PROCESSOR_ARCHITECTURE_X86
' 32-bit
Case PROCESSOR_ARCHITECTURE_X64, PROCESSOR_ARCHITECTURE_IA64
' 64-bit
Case Else
' other
End Select
Next
Другое возможное решение для Windows Script Host, на этот раз в JScript и с использованием переменной среды PROCESSOR_ARCHITECTURE:
var oShell = WScript.CreateObject("WScript.Shell");
var oEnv = oShell.Environment("System");
switch (oEnv("PROCESSOR_ARCHITECTURE").toLowerCase())
{
case "x86":
// 32-bit
case "amd64":
// 64-bit
default:
// other
}
Код C #:
int size = Marshal.SizeOf(typeof(IntPtr));
if (size == 8)
{
Text = "64 bit";
}
else if (size == 4)
{
Text = "32 bit";
}
В Linux вы можете определить "разрядность", прочитав
/proc/cpuinfo
, например.
cat /proc/cpuinfo | grep flags
, если он содержит флаг
lm
, это 64-разрядный процессор x86 (даже если у вас установлен 32-разрядный Linux)
Не уверен, работает ли это с процессорами, отличными от x86, такими как PPC или ARM.